<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>怎样进行插件开发e</title>
    </head>
    <body>
    	<p>通俗点讲。将常用的一些方法单独出来，能够进行跨时间、跨空间的供不同的开发人员进行协助使用，让代码能够进行重用。减少重复劳动力。</p>
    	<p>提取出来之后需要进行完善：</p>
    	<p><strong>优化：</strong>致命的是将方法直接暴露在全局，造成命名冲突，全局作用域性能损耗大。所以需要纯程式化的函数罗列编程-->面向对象编程。</p>
    	<p><strong>解决办法：</strong>对象封装。使用构造函数-prototype。</p>
    	<pre>
 var MathUtil = function(version, programmer) {  
    this.name = name;  
    this.programmer = programmer;  
};  
  
MathUtil.prototye = {  
  
    // 将构造函数置为MathUtil，这里一定要将constructor重新设置回MathUtil，不然会指向Object的构造函数  
    constructor: MathUtil,  
  
    // 加法  
    add: function(aaa, bbb) {      
        var result= aaa + bbb;      
        alert("result == " + result);      
    },  
  
    // 减法      
    reduce: function(aaa, bbb) {      
        var result= aaa - bbb;      
        alert("result == " + result);      
    },    
      
    // 乘法      
    multiply: function(aaa, bbb) {      
        var result= aaa * bbb;      
        alert("result == " + result);      
    },    
      
    // 除法      
    divide: function(aaa, bbb) {      
        var result = aaa / bbb;      
        alert("result == " + result);      
    }  
};  
    调用测试的代码：
	// 引用mathUtil.js文件后使用方式：  
	var m1 = new MathUtil("william",["william"]);  
	m1.programmer.push("william2");  
	  
	var m2 = new MathUtil("peter",["peter"]);  
	m1.programmer.push("peter2"); 
	这个时候m1,m2各自的programmer对应的就是不同数组了。而且还同时具有初始化参数的能力。
 
    以上的写法已经比较完美了，只是分开两部分来写还是有点那啥。对于强迫症患者来讲，还可以使用动态原型法：
    
Js代码  收藏代码
var MathUtil = function(version, programmer) {  
    this.name = name;  
    this.programmer = programmer;  
  
    // 使用必要条件进行检测，然后添加函数。  
    if(typeof this.add != "function") {  
  
        // 缓存MathUtil.prototye  
        var proto = MathUtil.prototye;  
  
        // 加法  
        proto.add = function(aaa, bbb) {      
            var result = aaa + bbb;      
            alert("result == " + result);      
        };  
  
        // 减法  
        proto.reduce = function(aaa, bbb) {      
            var result = aaa - bbb;      
            alert("result == " + result);      
        };  
  
        // 乘法  
        proto.multiply = function(aaa, bbb) {      
            var result= aaa * bbb;      
            alert("result == " + result);      
        };  
  
        // 除法  
        proto.divide = function(aaa, bbb) {      
            var result= aaa / bbb;      
            alert("result == " + result);      
        };  
    }  
};  
 
    以上对prototype新增方法的代码在使用new操作符执行时，只会进入判断一次，然后为MathUtil.prototype追加了相应的函数方法。
 
    是否要将prototype放在和构造函数平级还是放在构造函数体内，都没有错，就看个人或者团队喜好，不过最好统一才行。 
    	</pre>
    </body>
</html>